home *** CD-ROM | disk | FTP | other *** search
/ MacWorld 1999 January - Disc 2 / Macworld (1999-01) (Disk 2).dmg / Serious Demos / Symbolic Composer 4.2 / Environment / System / CRESC / Lengths / length-insert < prev    next >
Lisp/Scheme  |  1997-02-02  |  2KB  |  67 lines

  1. length-insert length-value ornament-lengths &optional how seed
  2.  
  3. This function facilitates the insertion of complex rhythmic ornaments. An ornamental 'gesture' usually made from a list of tick values can be inserted into the space of a length- value. What is left of the length-value into which the ornament-lengths have been inserted is added to the ornament- lengths as a note-length rest. The default position of this rest is at the start of the ornament-lengths thereby creating an anticipatory ornament commonly used to intensify the rhythm of a phrase.
  4.  
  5. (length-insert '1/1 '(45 13 14 16 19 25 32))
  6. --> (-1756 45 13 14 16 19 25 32)
  7.  
  8. By using the &optional 'end keyword this rest may be placed at the end of ornament- lengths thereby creating an acciaccaturra or appoggiatura.
  9.  
  10. (length-insert '768 '(45 13 14 16 19 25 32) 'end)
  11. --> (45 13 14 16 19 25 32 -604)
  12.  
  13. With the 'rand keyword the two rests-lengths are placed either side of the ornament- lengths. Their respective values are randomize with an &optional seed) but their total, with the sum of the ornament-lengths, is equal to the length-value. This produces an ornament whose execution has an improvisatory potential.
  14.  
  15. (length-insert '768 '(45 13 14 16 19 25 32) 'rand 0.12)
  16. --> (-277 45 13 14 16 19 25 32 -327)
  17.  
  18. Ratios or ticks may be used for length-value and ornament-lengths.
  19.  
  20. (length-insert '5/4 '(1/32 1/32 1/16 1/8 1/16))
  21. --> (-1800 60 60 120 240 120)
  22.  
  23. Here is a short example of length-insert in action. Note how the symbol-patterns matching the ornament-lengths include an appropriately placed symbol rest. Note also the use of both flatten and apply 'append. The latter does not conflict with transposed symbol parentheses.
  24.  
  25. (setq ol1 '(12 13 14 15 16) 
  26.       ol2 '(30 25 21 18 16) 
  27.       ol3 '(12 24 18 12 6)
  28. )
  29.  
  30. (setq os1 '(a -e (-1 b) -d c =)  
  31.       os2 '(= d (-1 c) -c -b b)
  32.       os3 '(= -g (1 f) d b -c =)
  33. )
  34.  
  35. (setq mel 
  36.     (apply 'append (list 
  37.       '(af f-b gh) os1 '(bf g-c) os3 '(-bf -ec fb d-b) os2)))
  38.  
  39. (setq rhy 
  40.       (flatten 
  41.        (list '(1/8 1/8 1/8) (length-insert '1/4 ol1 'end) 
  42.              '(1/16 1/4..) (length-insert '1/8 ol3 'rand 0.12)
  43.              '(1/8 1/8 1/8 1/4) (length-insert '1/4. ol2 ))))
  44.    
  45. (def-tonality
  46.    bass (activate-tonality (lydian c 4))
  47. )
  48.  
  49. (def-symbol
  50.    bass mel
  51. )
  52.  
  53. (def-length
  54.    bass rhy
  55. )
  56.  
  57. (def-zone
  58.    bass (list (make-zone rhy))
  59. )
  60.  
  61. (def-tempo 120)
  62.  
  63. (midiport :printer)
  64.  
  65. (compile-instrument-p "ccl;output:" "insert"
  66.    bass
  67. )